\chapter{仿真工具栏}
仿真工具栏包含与工作站仿真的配置和运行相关的功能。

\section{仿真设置}

\subsection{场景概念}
一个场景(Scenario)包含了一个完整的仿真设置。具体来说，场景描述了一个仿真中要运行的机器人任务和智能组件及其运行方式。

可以添加多个场景。每个场景指定仿真中运行不同的任务和智能组件。

每次运行仿真使用的是活跃场景。

\subsection{活跃场景下拉框}
活跃场景下拉框用于从所有场景中选择活跃场景，用于当前仿真。

下拉列表中的重命名按钮可对场景进行重命名。删除按钮删除对应的场景。

\subsection{添加}
点击添加按钮之后，在弹出的下拉列表中填入要添加的场景的名称，点击“对钩”添加场景。

\subsection{场景设置}
场景设置修改当前活跃场景的配置。

\subsubsection{仿真对象}
仿真对象树中列出了场景可以选择运行的机器人系统和智能组件。

选中机器人系统，可以设置控制器任务的运行方式。

\begin{itemize}
    \item 单次：在仿真时运行一次控制器里的任务后停止。
    \item 连续：在仿真时循环运行控制器里的任务，即当任务运行结束后会自动再次运行任务。
\end{itemize}

选中机器人系统里的任务，可以设置任务的入口函数。默认为main函数。

\section{状态}
状态指的是工作站中各个对象的取值，如智能组件属性的值，信号的值，几何对象的位姿等。

用户可以将当前各个对象的取值有选择地保存成一个状态。

在仿真开始前或者结束后，用户可以加载之前保存的状态，让工作站中的对象恢复之前的取值。

在仿真运行过程中发生的智能组件属性修改不会进入undo队列。所以如果想回到仿真前的状态，需要在仿真
前保存工作站的状态。

仿真开始时，系统会自动保存一个状态，包含工作站中所有对象的取值。

\subsection{保存当前状态}
\subsubsection{状态名称}
指定要保存的状态名称。
\subsubsection{描述}
给状态添加描述。
\subsubsection{要保存的值}
选择状态中要保存的值。

\subsection{加载状态}
从下拉列表中选择保存的状态加载到工作站中。

Auto saved state是系统在每次仿真开始时自动保存的状态。

\section{仿真的运行}
点击“开始仿真”按钮，开始一次仿真的运行。

仿真开始的时候，使用工作站当前的对象取值。在活跃场景中包含的对象开始运行。智能组件根据起始
状态开始运行，传播信号，执行动作。控制器启动任务的执行。

当有控制器的任务编译失败时，不能开始仿真。所以在开始仿真前需要保证所有控制器的任务编译成功，
包括没有包含在仿真场景中的控制器任务。

\subsection{仿真中的机器人任务}
如果活跃场景包含机器人任务，则当所有机器人任务运行结束时，仿真会自动结束。如果活跃场景中不包含
机器人任务，则仿真不会自动结束。

\subsection{仿真中的智能组件}
在仿真运行时，智能组件本身具有两种状态：激活态和关闭态。

智能组件的激活主要通过信号。对于一些智能组件，用户可以点击诸如execute或者active等信号将其激活，也可
以通过信号连接的方式来控制智能组件。

智能组件的关闭主要有两种形式：一是像激活一样，通过信号来关闭。二是一些智能组件执行完本身的功能后自动
关闭。

在一个仿真时步内如果激活一个智能组件，它会在本时步内立即开始执行动作。特别需要注意：如果关闭一个智能
组件，它会在执行完这个仿真时步的动作后在下个仿真时步关闭。也就是说，关闭一个组件会经历一个仿真时步的
延迟。

如果一个仿真时步内组件被激活后关闭或者关闭后激活，这个组件都会执行一次动作后在下个仿真时步关闭，这与
激活或者关闭发起的顺序无关。如果用户希望控制激活和关闭顺序的先后，可以将后发起的命令延迟到下个时间步
执行。

对于一些不依赖于时间的组件，比如Queue等，它们一直处于关闭态。它们的动作在信号传递的瞬间就执行，而不
依赖于组件本身是否处于激活态。

\section{仿真暂停}
当仿真在运行时，点击“暂停”按钮，将仿真暂停。控制器任务和智能组件的运行都会暂停。

暂停状态下，再次点击“暂停”按钮，仿真前进一个时间步。

\section{仿真继续}
在暂停状态下，“开始仿真”按钮变成“恢复仿真”按钮。点击“恢复仿真”按钮，仿真继续运行。

\section{停止仿真}
在运行或暂停状态下，点击“停止仿真”按钮，仿真停止。

停止之后的仿真无法继续运行。

\section{重置仿真}
当仿真运行中发生错误之后，需要点击“重置”按钮重置仿真状态之后才能再次进行仿真。

在对数据面板中的路径进行“沿路径运行”时发生错误之后，也需要点击“重置”按钮才能继续运行仿真。

\section{恢复工作站状态}
加载仿真开始时自动保存的状态。将工作站恢复到仿真开始之前的状态。

\section{I/O仿真器}
I/O仿真器让用户手动设置对象的信号状态。可以在仿真进行时手动设置对象的信号。

\subsection{选择系统}
激活输入框之后，可在布局树中选择要设置信号的对象。

点击布局树中的第一个工作站节点，可以选择工作站逻辑。其他可选择的对象类型包括布局树中的机器人和智能组件。

选择了对象之后，对象所有的信号显示在面板中。点击信号可设置信号的值。
